package slidingWindow;

/**
 * 给你字符串 s 和整数 k 。
 * <p>
 * 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。
 * <p>
 * 英文中的 元音字母 为（a, e, i, o, u）。
 */
public class MaxVowels {
    private static boolean isAEIOU(char c) {
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
    }

    public static int maxVowels(String s, int k) {
        int count = 0;
        //使用两个指针分别对应滑动窗口的左边和右边
        int left = 0, right = 0;
        //让右指针先向右边走k-1步，形成长度为k的滑动窗口
        for (int i = 0; i < k; i++) {
            //判断当前窗口中的元音字母的数量
            if (isAEIOU(s.charAt(i))) {
                count++;
            }
            right++;
        }
        int maxCount = count; // 记录最大数量

        // 窗口开始滑动
        while (right < s.length()) {
            if (isAEIOU(s.charAt(left))) {
                count--; // 移除左边元音字母
            }
            left++;
            if (right < s.length() && isAEIOU(s.charAt(right))) {
                count++; // 添加右边元音字母
            }
            right++;
            maxCount = Math.max(maxCount, count); // 更新最大数量
        }
        return maxCount;
    }

    public static void main(String[] args) {
        maxVowels("abciiidef", 3);

    }
}
